package com.note.feng.leetcode.algorithms.easy.four;

import java.util.HashMap;
import java.util.Map;

public class FourHundredFiftyNine {
    /**
     * 459 重复的子字符串
     * 给定一个非空的字符串 s ，检查是否可以通过由它的一个子串重复多次构成。
     *
     * 示例 1:
     *
     * 输入: s = "abab"
     * 输出: true
     * 解释: 可由子串 "ab" 重复两次构成。
     * 示例 2:
     *
     * 输入: s = "aba"
     * 输出: false
     * 示例 3:
     *
     * 输入: s = "abcabcabcabc"
     * 输出: true
     * 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
     *  
     * 提示：
     *
     * 1 <= s.length <= 104
     * s 由小写英文字母组成
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/repeated-substring-pattern
     */
    /**
     *解法：枚举
     * 假设字符串 a 是字符串 s 的子字符串，那么一定满足 s.length() % a.length() == 0
     * 并且字符串 s[i] == s[i - a.length()]
     * 因为子字符串的长度一定不会超出字符串长度的一半，所以遍历一半就可以了
     * @param s
     * @return
     */
    public boolean repeatedSubstringPattern(String s) {
        int n = s.length();
        for (int i = 1; i * 2 <= n; i++) {
            if(n % i == 0){
                boolean match = true;
                for (int j = i; j < n; j++) {
                    if(s.charAt(j) != s.charAt(j - i)){
                        match = false;
                        break;
                    }
                }
                if(match){
                    return true;
                }
            }
        }
        return false;
    }
}
